package com.guli.eduService.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.guli.commonUtils.vo.CourseVo;
import com.guli.eduService.entity.EduCourse;
import com.baomidou.mybatisplus.extension.service.IService;
import com.guli.eduService.entity.vo.*;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 课程 服务类
 * </p>
 *
 * @author zxc
 * @since 2023-04-03
 */
public interface EduCourseService extends IService<EduCourse> {
    // 接口中，定义添加课程基本信息的方法 ：

    /**
     * 定义 保存课程简介/课程基本信息的方法
     * @param courseFormInfo
     * @return
     */
    public String addCourseInfo(SaveCourseFormInfo courseFormInfo);

    /**
     * 定义 获取当前课程基本信息的方法
     * @param courseId
     * @return
     */

    public SaveCourseFormInfo getCourseVOInfo(String courseId);

    /**
     * 定义 修改课程基本信息的方法
     * @param courseFormInfo
     * @return
     */

    public String updateCourseInfo(SaveCourseFormInfo courseFormInfo);

    /**
     * 定义 根据课程id，联合多个数据库表中数据，来查询指定课程的详细信息;
     * @param courseId
     * @return
     */

    PublishedCourseVO queryPulishedCourseInfo(String courseId);

    /**
     * 定义 根据课程id，来修改当前课程的状态
     * @param courseId
     * @return
     */

    boolean updatePublishCourseInfo(String courseId);

    /**
     * 根据查询条件，分页获取符合条件的课程数据;
     * @param queryCourseFormInfo
     * @param coursePage
     */

    void conditionQueryCourseInfo(QueryCourseFormInfo queryCourseFormInfo, Page<EduCourse> coursePage);

    /**
     * 根据课程id，删除当前课程所有信息;（不仅仅是课程基本信息，还包含课程简介信息，课程章节信息，课程课时信息）
     * @param courseId
     * @return
     */

    boolean deleteAllCourseInfo(String courseId);

    /**
     * 定义 根据某个排序规则所要查询的课程数量;
     * @param courseNum
     * @return
     */
    List<EduCourse> queryByCourseNum(String courseNum);

    /**
     * 定义 分页显示条件查询到的课程信息数据
     * @param pageParam
     * @param courseQuery
     * @return
     */
    Map<String, Object> listCourseFrontInfo(Page<EduCourse> pageParam, CourseQueryVO courseQuery);

    /**
     * 定义 根据课程id，去查询前台所要展示的课程数据信息;
     * @param courseId
     * @return
     */
    CourseDetailsVO queryCourseDetails(String courseId);

    /**
     * 定义 根据课程id，对于某个课程的浏览量进行加一操作;
     * @param courseId
     */
    void updateCourseViewCount(String courseId);

    /**
     * 定义 根据课程id，查询基本课程信息;
     * @param courseId
     * @return
     */
    CourseVo queryBasicCourseInfo(String courseId);
}
